package com.mashibing.mashibing;

import java.util.concurrent.LinkedTransferQueue;

/**
 * 当TransferQueue传递，实际上是前面这各种各样Queue的一个组合，它可以给线程来传递任务，不像是SynchronousQueue只能传递一个， TransferQueue做成列表可以传好多个。
 * 如果你对SynchronousQueue不太了解，可以看下我昨天写的文章：昨天我去面试，问他SynchronousQueue没答上来。
 * 比较牛X的是它添加了一个方法叫transfer，如果我们用put就相当于个线程来了往里一装它就走了。transfer就是装完在这等着，阻塞等有人把它取走我这个线程才回去干我自己的事情。我写了个例子给大家看看：
 */
public class T_TransferQueue {

    public static void main(String[] args) throws InterruptedException {
        LinkedTransferQueue<String> strs = new LinkedTransferQueue<>();

        new Thread(() -> {
            try {
                System.out.println(strs.take());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        strs.transfer("aaa");

        strs.put("bbb");
//
//
//        new Thread(() -> {
//            try {
//                System.out.println(strs.take());
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//        }).start();


    }
}
